CORS Policy এবং Custom CORS Filter তৈরি

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এবং CORS (Cross-Origin Resource Sharing)
201

CORS (Cross-Origin Resource Sharing) হল একটি নিরাপত্তা বৈশিষ্ট্য যা এক ওয়েব পৃষ্ঠাকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করার অনুমতি দেয়। সাধারণত, ব্রাউজার বিভিন্ন ডোমেইন থেকে প্রাপ্ত রিকোয়েস্টকে সীমাবদ্ধ রাখে। CORS নীতির মাধ্যমে আপনি API বা ওয়েব অ্যাপ্লিকেশনের রিসোর্স গুলোকে নির্দিষ্ট ডোমেইন বা উৎস থেকে অ্যাক্সেস করার অনুমতি দিতে পারেন।

Spring Security-তে CORS কনফিগারেশন করতে দুটি সাধারণ পদ্ধতি রয়েছে:

  1. Global CORS Configuration (Spring Security Configuration থেকে)
  2. Custom CORS Filter (একটি কাস্টম ফিল্টার তৈরি করে)

CORS Configuration Spring Security-তে:

Step 1: Global CORS Configuration:

Spring 5 এবং Spring Boot 2.4 এর পর থেকে CORS কনফিগারেশন করার জন্য Spring Security-তে CorsConfigurationSource এবং CorsFilter ব্যবহার করা হয়।

1. Spring Security Configuration Class তৈরি:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.cors.CorsFilter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and() // Enable CORS
            .authorizeRequests()
            .antMatchers("/public/**").permitAll() // Open endpoints
            .anyRequest().authenticated(); // All other requests need authentication
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        
        config.setAllowCredentials(true); // Allow cookies to be sent
        config.addAllowedOrigin("http://localhost:3000"); // Allow specific origin (for example, frontend app)
        config.addAllowedHeader("*"); // Allow all headers
        config.addAllowedMethod("GET"); // Allow GET method
        config.addAllowedMethod("POST"); // Allow POST method
        source.registerCorsConfiguration("/**", config); // Apply to all endpoints

        return new CorsFilter(source);
    }
}

ব্যাখ্যা:

  • config.setAllowCredentials(true): ক্লায়েন্ট সাইড থেকে কুকি বা ক্রেডেনশিয়ালস পাঠানোর অনুমতি দেয়।
  • config.addAllowedOrigin("http://localhost:3000"): শুধুমাত্র http://localhost:3000 থেকে রিকোয়েস্ট অনুমোদিত। আপনি এখানে আপনার প্রয়োজন অনুসারে ডোমেইন বা ওয়েব অ্যাপ্লিকেশনের ইউআরএল দিতে পারেন।
  • config.addAllowedMethod("GET"): GET এবং POST এর মতো HTTP মেথড অনুমোদিত। অন্য মেথডগুলোর জন্যও অনুমতি দিতে পারেন।

Step 2: Spring Boot Application Class

Spring Boot Application ক্লাসে @SpringBootApplication অ্যানোটেশন যোগ করুন এবং সিস্টেম চালু করুন।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

এখন, আপনার অ্যাপ্লিকেশনটি http://localhost:8080 চালু হয়ে যাবে, এবং CORS কনফিগারেশনটি http://localhost:3000 থেকে আগত রিকোয়েস্ট অনুমোদন করবে।


Custom CORS Filter তৈরি:

CORS Filter তৈরি করার মাধ্যমে আপনি সম্পূর্ণ কাস্টমাইজড CORS পলিসি সেট করতে পারবেন। এটি বিশেষত প্রয়োজনে দরকার হয়, যেখানে আপনি API রিকোয়েস্টের ভিত্তিতে CORS কনফিগারেশন পরিবর্তন করতে চান।

Step 1: Custom CORS Filter Class

import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class CustomCorsFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, javax.servlet.http.HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        response.addHeader("Access-Control-Allow-Origin", "*"); // Allow all origins, change to specific domain if needed
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(javax.servlet.http.HttpServletResponse.SC_OK);
        } else {
            filterChain.doFilter(request, response);
        }
    }
}

ব্যাখ্যা:

  • response.addHeader("Access-Control-Allow-Origin", "*"): সমস্ত উৎস থেকে আসা রিকোয়েস্ট অনুমোদিত।
  • Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS সহ সমস্ত HTTP মেথড অনুমোদিত।
  • OPTIONS রিকোয়েস্ট হলে শুধুমাত্র SC_OK (200) স্ট্যাটাস কোড পাঠানো হয়। এটা CORS প্রিপ-flight রিকোয়েস্টের জন্য প্রয়োজন।

Step 2: Custom Filter Register করা

Spring Boot অ্যাপ্লিকেশন ক্লাসে এই ফিল্টারটি রেজিস্টার করুন।

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebConfig {

    @Bean
    public FilterRegistrationBean<CustomCorsFilter> corsFilter() {
        FilterRegistrationBean<CustomCorsFilter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new CustomCorsFilter());
        bean.addUrlPatterns("/api/*"); // Apply filter to your API URLs
        return bean;
    }
}

ব্যাখ্যা:

  • addUrlPatterns("/api/*"): এই কাস্টম CORS ফিল্টারটি /api/* URL প্যাটার্নের সমস্ত রিকোয়েস্টে কাজ করবে।
  • FilterRegistrationBean Spring Boot ফিল্টার রেজিস্টার করার জন্য ব্যবহার করা হয়।

Step 3: Application Configuration

Spring Boot Application ক্লাসে @SpringBootApplication অ্যানোটেশন যোগ করুন এবং সিস্টেম চালু করুন।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

এখন আপনার কাস্টম CORS ফিল্টারটি আপনার API রিকোয়েস্টে কাজ করবে।


উপসংহার:

  1. Global CORS Configuration: যদি আপনার অ্যাপ্লিকেশনটি একটি সুনির্দিষ্ট রিসোর্স সেটের জন্য CORS কনফিগার করতে চান তবে Spring Security-তে CORS কনফিগারেশন করা একটি সহজ এবং উপযুক্ত পদ্ধতি।
  2. Custom CORS Filter: যদি আপনি আরও কাস্টমাইজড সিকিউরিটি এবং বিশেষ ধরনের CORS নীতি প্রয়োগ করতে চান, তবে একটি কাস্টম CORS ফিল্টার তৈরি করা প্রয়োজন।

CORS কনফিগারেশন সঠিকভাবে ব্যবহৃত হলে, এটি Cross-Origin রিকোয়েস্টগুলোকে সুরক্ষিতভাবে পরিচালনা করতে সাহায্য করে এবং আপনার API বা ওয়েব অ্যাপ্লিকেশনকে নিরাপদ রাখে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...